#!/bin/sh
#测试系统： Centos7.6
#脚本使用前，提前准备好二进制安装包，创建/hc/tools放在/hc/tools下 配置文件放在/etc/my.cnf
#脚本不足：没有对预定好的mysql家目录 $basedir和mysql数据目录/hc/mysql以及/etc/my.cnf做判断，默认是这两个目录不存在或者目录是没有内容的，如果有内容可能会有警告
#变量赋值
group=mysql
user=mysql
basedir=/usr/local/mysql
datadir=/hc/mysql
mysql_version="mysql-5.7.35-linux-glibc2.12-x86_64"
mysql_package=$mysql_version".tar.gz"
url="https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz"
#准备开始
echo "Installing :" $mysql_version
#安装必须软件
yum -y install 'perl(Data::Dumper)' 
yum -y install libaio* 
yum -y install wget
#下载mysql安装包
echo "Downloading :" $mysql_package

wget $url
# mysql配置文件
echo "写入my.cnf"
cat>my.cnf<<EOF
[client]
port        = 3306
socket      = /tmp/mysql.sock

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
user = mysql

basedir = /usr/local/mysql
datadir = /hc/mysql/data
pid-file = /hc/mysql/data/mysql.pid

log_error = /hc/mysql/data/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /hc/mysql/data/mysql-slow.log
#慢SQL日志

character-set-server=utf8
#服务端默认字符集
wait_timeout=1800
#请求的最大连接时间
interactive_timeout=1800
#和上一参数同时修改才会生效

skip-external-locking
key_buffer_size = 32M
max_allowed_packet = 1024M
table_open_cache = 128
sort_buffer_size = 768K
net_buffer_length = 8K
read_buffer_size = 768K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 16
query_cache_size = 16M
tmp_table_size = 32M
performance_schema_max_table_instances = 1000

explicit_defaults_for_timestamp = true
#skip-networking
max_connections = 1500
#最大连接数
max_connect_errors = 100
#最大错误连接数
open_files_limit = 65535

log_bin=mysql-bin
binlog_format=mixed
binlog-checksum=CRC32
binlog-rows-query-log_events=1
#bin-log日志

server_id   = 232
expire_logs_days = 10
early-plugin-load = ""

plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
#永久强制启用密码插件
validate_password_policy=1
#密码强度检查等级
validate_password_length=8
#密码最小长度 validate_password_mixed_case_count=1
#密码至少要包含的小写字母个数和大写字母个数 validate_password_number_count=1
#密码至少要包含的数字个数 validate_password_special_char_count=1
#密码至少要包含的特殊字符数。 default_password_lifetime=90
#密码90天过期

plugin-load-add=connection_control.so
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
#永久强制启用会话控制插件
connection_control_min_connection_delay=60000
connection_control_failed_connections_threshold=30
#连续失败次数30和超过失败连接上限后的最小延迟登录时间为1分钟

default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M
EOF

cp my.cnf /etc/
#--用户创建--
#匹配该文件中以$group变量值开头的内容
#创建组，如果组存在就直接执行如下命令
#--egrep在文件中查找指定模式 
#--^表示匹配的字符必须在最前边 字符$与^类似,匹配最末的字符.

egrep "^$group" /etc/group >& /dev/null
if [ $? -ne 0 ]
then
    groupadd $group
fi

#创建用户，如果用户存在就直接执行如下命令
egrep "^$user" /etc/passwd >& /dev/null
if [ $? -ne 0 ]
then
    useradd $user -g $group -s /sbin/nologin -M
fi
#解压二进制安装包
tar zxvf $mysql_package -C /usr/local
#重命名 隐藏版本号
cd /usr/local/
mv $mysql_version mysql
#创建数据目录
mkdir -p $datadir/data
#授权
#授权mysql家目录basedir和mysql数据目录datadir
cd $basedir
chown -R $group:$user $basedir
chown -R $group:$user $datadir
#配置文件（提前准备好）
chmod 640 /etc/my.cnf
#mysql初始化
cd $basedir/bin
./mysqld --initialize --user=mysql --basedir=$basedir --datadir=$datadir/data
#加入开机自启动
cp $basedir/support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
#环境变量修改
echo "export PATH=$PATH:$basedir/bin" >> ~/.bash_profile
source ~/.bash_profile
#启动mysql服务
/etc/init.d/mysqld start
#启动结果
echo $mysql_version " install 成功success."
